#!/usr/bin/env python
# -*-coding:utf-8 -*-

"""
1. 什么是闭包：函数的返回值是函数对象，只有外部函数才可以对他进行访问，提高了安全性
2. 闭包的特点：就是内部函数引用了外部函数中的变量
3. 闭包常用的方式：因为作用域的原因，在函数外部就无法拿到函数中的变量和内部函数。通常我们需要使用函数中的变量时，才去将变量返回的办法。
同理，在使用内部函数时，我们也可以将函数名作为返回值返回。 这是闭包最常用的方式
4. 闭包的使用场景：闭包经常作为回调进行使用，比如一个异步的IO、网络、定时器啥的。如果代码写的不够严谨，在对象需要被回收的时候，回调出去的函数依然被其他地方引用住，就会导致该对象的内存泄漏。
"""


def outside():
    m = 1

    def inside():
        n = m + 1
        return n

    print(inside.__closure__)  # 判断是否为闭包函数
    return inside


f = outside()
print(f())
print(f())
